package com.anysoft.utils;

import android.text.TextUtils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ProjectName：gy_fund-android
 * @ClassDescription：字符串处理工具类
 * @CreateUser： yanbin
 * @CreateTime：2017-03-07 17:05
 * @ModifiedUser：
 * @ModifiedTime：
 * @ModifiedRemark：
 */

public class StringUtils {
    public final static String SHORT_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 判断传入的字符串是否是 NULL 或“”
     *
     * @param s 字符串
     * @return
     */
    public static boolean isNullOrEmpty(String s) {
        if (s == null || "".equals(s)) {
            return true;
        }
        return false;
    }


   /**
     * 判断传入的字符串是否是 NULL 或“”
     *
     * @param s 字符串
     * @return
     */
    public static String checkParam(String s) {
        if (s == null || "".equals(s)) {
            return "";
        }
        return s;
    }


    public static String formatDate(Date date, String dateFormat) {
        if (isNullOrEmpty(dateFormat)) {
            dateFormat = SHORT_DATE_FORMAT;
        }
        SimpleDateFormat format = new SimpleDateFormat(dateFormat);
        return format.format(date);
    }

    /**
     * 字符串转数字
     *
     * @param s
     * @return
     */
    public static int parseInt(String s) {
        if (s == null || s == "") {
            return 0;
        } else {
            return Integer.parseInt(s);
        }
    }

    /**
     * 将传的数据转换成字符串 如果 为空 或传入的数据不是整型数据则 返回 传入的 i
     *
     * @param s 待转换字符串
     * @param i 字符串为空或非整形时返回的值
     * @return
     */
    public static int parseInt(String s, int i) {
        if (isNullOrEmpty(s)) {
            return i;
        } else {
            try {
                return Integer.parseInt(s);
            } catch (Exception e) {
                return i;
            }
        }
    }

    /**
     * 根据传入用户风险等级 转换成对应的文字描述
     *
     * @param level
     * @return
     */
    public static String parseRiskLevel(String level) {

//        1:安全型
//        2:保守型
//        3:稳健型
//        4:积极型
//        5:进取型
        if ("1".equals(level)) {
            return "安全型";
        } else if ("2".equals(level)) {
            return "保守型";
        } else if ("3".equals(level)) {
            return "稳健型";
        } else if ("4".equals(level)) {
            return "积极型";
        } else if ("5".equals(level)) {
            return "进取型";
        }
        return null;

    }


    /**
     * 金额格式化 默认两位小数
     *
     * @param s 金额
     * @return
     */
    public static String insertComma(String s) {
        return insertComma(s, 2);
    }

    /**
     * 金额格式化
     *
     * @param s   金额
     * @param len 小数位数 -1 默认是 传递的参数有即为小数就显示几位
     * @return
     */
    public static String insertComma(String s, int len) {

        if (s == null || s.length() < 1) {
            return "--";
        }
        if (s.contains("--")){
            return "--";
        }
        NumberFormat formater = null;
        double num = Double.parseDouble(s);

        if (len == -1) {
            len = 0;
            if (s.contains(".")) {
                len = s.length() - s.lastIndexOf(".") - 1;
            }
        }

        if (len == 0) {
            formater = new DecimalFormat("###,##0");

        } else {
            StringBuffer buff = new StringBuffer();
            buff.append("###,##0.");
            for (int i = 0; i < len; i++) {
                buff.append("0");
            }
            formater = new DecimalFormat(buff.toString());
        }
        return formater.format(num);

//        BigDecimal decimalCJXJKX = new BigDecimal("1234567890123456789.92");
//        DecimalFormat myformat = new DecimalFormat();
//        myformat.applyPattern("##,###.00000");
//        System.out.println(myformat.format(decimalCJXJKX));
    }

    /**
     * 将数值字符串转换成 BigDecimal
     *
     * @param s 数值字符串
     * @return 转换后的 数值 如有错 返回0
     */
    public static BigDecimal formatBigDecimal(String s) {
        BigDecimal decimal = new BigDecimal(0);
        if (isNullOrEmpty(s)) {
            return decimal;
        }
        try {
            decimal = new BigDecimal(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return decimal;
    }

    private static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
    private static final String REGEX_ID = "\\d{15}|\\d{17}[\\dX]";

    public static boolean isEmail(String email) {
        return Pattern.matches(REGEX_EMAIL, email);
    }

    public static boolean isIdentity(String identity) {
        return Pattern.matches(REGEX_ID, identity);
    }

    public static String removePointString(String string) {
        if (TextUtils.isEmpty(string)) {
            return "";
        } else {
            return string.replace(".", "");
        }
    }

    public static String inputStreamParseString(InputStream is) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if (is != null) {
            try {
                int len;
                while ((len = is.read()) != -1) {
                    bos.write(len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return bos.toString() == null ? "" : bos.toString();
    }

    /**
     *
     * @param str
     * @return 字符串中是否包含汉字
     */
    public static boolean isContainChinese(String str) {
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

}
